package br.com.hs.nfe.common.enumeration;

/**
 * Enumeração dos tipos de emissão da NF-e.
 * @author Ranlive Hrysyk
 */
public enum TipoEmissaoEnum {

    /**
     * Emissão normal.
     */
    NORMAL("1", "Normal", "Normal"),
    /**
     * Emissão em contingência com impressão do DANFE em Formulário de Segurança.
     */
    CONTINGENCIA("2", "Contingência", "Contingência"),
    /**
     * Emissão em contingência no Sistema de Contingência do Ambiente Nacional - SCAN.
     */
    CONTINGENCIA_SCAN("3", "Contingência com SCAN", "Cont. SCAN"),
    /**
     * Emissão em contingência com envio da Declaração Prévia de Emissão em Contingência - DPEC.
     */
    CONTINGENCIA_DPEC("4", "Contingência via DPEC", "Cont. DPEC"),
    /**
     * Emissão em contingência com impressão do DANFE em Formulário de Segurança para Impresão 
     * de Documento Auxiliar de Documetno Fiscal Eletrônico - FS-DA.
     */
    CONTINGENCIA_FS_DA("5", "Contingência FS-DA", "Cont. FS-DA"),
    /**
     * Emissão em contingência na SEFAZ Virtual do Ambiente Nacional
     */
    CONTINGENCIA_SVC_AN("6", "Contingência SVC-AN", "Cont. SVC-AN"),
    /**
     * Emissão em contingência na SEFAZ Virtual do RS
     */
    CONTINGENCIA_SVC_RS("7", "Contingência SVC-RS", "Cont. SVC-RS");
    private String codigo;
    private String descricao;
    private String descricaoRelatorio;

    private TipoEmissaoEnum(String codigo, String descricao, String descricaoRelatorio) {
        this.codigo = codigo;
        this.descricao = descricao;
        this.descricaoRelatorio = descricaoRelatorio;
    }

    /**
     * Obtém o código do tipo de emissão.
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * Descriação da emissão.
     */
    public String getDescricao() {
        return descricao;
    }

    @Override
    public String toString() {
        return getDescricao();
    }

    /**
     * Descrição a ser utilizada na DANFE.
     */
    public String getDescricaoRelatorio() {
        return descricaoRelatorio;
    }

    /**
     * Obtém um enum pelo código.
     */
    public static TipoEmissaoEnum getEnumByCodigo(String string) {
        for (TipoEmissaoEnum e : values()) {
            if (e.getCodigo().equals(string)) {
                return e;
            }
        }
        return null;
    }
}
